﻿/*

复原单据 
Time Limit:1000MS  Memory Limit:32768K


Description:
一张标签上有一个5位数的编号,其千位数和百位数处已经变得模糊不清,如下图。
1XX47 
但知道这个5位数是57或67的倍数。现在要设计一个算法，
输出所有满足这些条件的5位数，并统计这样的数的个数。

Output:
按从小到大的顺序，每行输出一个满足以上条件的5位数，最后一行输出总的个数。 
*/

#include <stdio.h>
#define STEP1 57U
#define STEP2 67U

unsigned exactdiv(unsigned nom, unsigned den)
{
	unsigned rem=nom%den;
	if (rem)
	{
		nom+=den-rem;
	}
	return nom;
}

void form(unsigned start, unsigned end)
{
	unsigned loop1, loop2;
	int flag=0;
	unsigned total=0u;
	loop1=exactdiv(start, STEP1);
	loop2=exactdiv(start, STEP2);

	while(loop1<=end&&loop2<=end)
	{
		++total;
		if (loop1<loop2)
		{
			printf("%u\n", loop1);
			loop1+=STEP1;
		}
		else if (loop2<loop1)
		{
			printf("%u\n", loop2);
			loop2+=STEP2;
		}
		else
		{
			printf("%u\n", loop1);
			loop1+=STEP1;
			loop2+=STEP2;
		}
	}
	printf("%u\n", total);
}
int main(int argc, char* argv[])
{
	form(10047, 19947);
	return 0;
}
